/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;

import com.akcess.vo.*;
import com.akcess.exception.*;
import manejadores.*;
import java.util.*;
import java.sql.*;
import java.sql.Date;

/**
 *
 * @author Alejandro
 */
public class GestionarReservas extends HttpServlet {

    private static final String dirBASE = "jsp/Reservas";

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet GestionarReservas</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet GestionarReservas at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String id = request.getParameter("id");

        String accion = request.getParameter("hacer");
        request.setAttribute("modulo", "Reservas");
        try {
            if (accion.equals("Agregar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/AgregarReserva.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("opAgregar")) {
                String mensaje = this.AgregarReserva(request, response);
                if (mensaje != null) {
                    request.setAttribute("Error", mensaje);
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarReservas.jsp");
                    dispatcher.forward(request, response);
                } else {
                    request.setAttribute("Error", "Algo no anda...");
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarReservas.jsp");
                    dispatcher.forward(request, response);
                }

            }
            if (accion.equals("Listar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarReservas.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Listar_Mis")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarMisReservas.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Cancelar_Mis")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/CancelarMisReservas.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Modificar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarModificarReservas.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Cancelar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarCancelarReservas.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Registrar_Eventos")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarRegistrarEventos.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("opRegistrar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/RegistrarEventoReserva.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("opRegistrarEvento")) {
                if (this.RegistarEvento(request, response)) {
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/RegistrarEventoReserva.jsp");
                    dispatcher.forward(request, response);
                } else {
                    request.setAttribute("Error", "El Evento no puede ser Registrado,ya existe el evento para la reserva o selecciono mal los datos...");
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/RegistrarEventoReserva.jsp");
                    dispatcher.forward(request, response);
                }
            }
            if (accion.equals("opModificar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ModificarReserva.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("opVer")) {
                String tipo = request.getParameter("tipo");

                if (tipo.equals("Aula")) {
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/VerReservaAula.jsp");
                    dispatcher.forward(request, response);
                } else if (tipo.equals("Sala")) {
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/VerReservaSM.jsp");
                    dispatcher.forward(request, response);
                } else if (tipo.equals("RM")) {
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/VerReservaRM.jsp");
                    dispatcher.forward(request, response);
                }

            }
            if (accion.equals("modificacion")) {
                String mensaje = this.ModificarReserva(request, response);
                if (mensaje != null) {
                    request.setAttribute("Error", mensaje);
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarModificarReservas.jsp");
                    dispatcher.forward(request, response);
                } else {
                    request.setAttribute("Error", "Algo no anda...");
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarModificarReservas.jsp");
                    dispatcher.forward(request, response);
                }
            }
            if (accion.equals("opCancelar")) {
                String mis = request.getParameter("cancelar");
                if (mis.equalsIgnoreCase("mis")) {
                    if (this.CancelarReserva(request, response)) {
                        request.setAttribute("Mensaje", "La Reserva a nombre de " + request.getParameter("NombreSolicitante") + " fue cancelada exitosamente...");
                        RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/CancelarMisReservas.jsp");
                        dispatcher.forward(request, response);
                    } else {
                        request.setAttribute("Mensaje", "La Reserva a nombre de " + request.getParameter("NombreSolicitante") + " no pudo ser cancelada...");
                        RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/CancelarMisReservas.jsp");
                        dispatcher.forward(request, response);
                    }
                } else {
                    if (this.CancelarReserva(request, response)) {
                        request.setAttribute("Mensaje", "La Reserva a nombre de " + request.getParameter("NombreSolicitante") + " fue cancelada exitosamente...");
                        RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarCancelarReservas.jsp");
                        dispatcher.forward(request, response);
                    } else {
                        request.setAttribute("Mensaje", "La Reserva a nombre de " + request.getParameter("NombreSolicitante") + " no pudo ser cancelada...");
                        RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarCancelarReservas.jsp");
                        dispatcher.forward(request, response);
                    }
                }
            }
            //Para listar las reservas con la opcion de modificarlas.
            if (accion.equals("ModificarReservas")) {
                String res = "";
                String link = "Modificar";
                String operacion = "opModificar";
                if (id != null && id.equals("Aula")) {
                    operacion = operacion + "&tipo=Aula";
                    res = this.ListarReservasAulas(request, response, link, operacion);
                } else if (id != null && id.equals("Sala")) {
                    operacion = operacion + "&tipo=Sala";
                    res = this.ListarReservasSalas(request, response, link, operacion);
                } else if (id != null && !(id.equals("Sala")) && !(id.equals("Aula"))) {
                    int tipo = Integer.parseInt(id);
                    operacion = operacion + "&tipo=RM&tipoRM=" + tipo;
                    res = this.ListarReservasRM(request, response, tipo, link, operacion);
                }

                response.setContentType("text/html;charset=UTF-8");
                PrintWriter out = response.getWriter();
                try {
                    out.print(res);

                } finally {
                    out.close();
                }
            }
            //Para listar las reservas con la opcion de verlas.
            if (accion.equals("ListarReservas")) {
                String res = "";
                String link = "Ver";
                String operacion = "opVer";
                if (id != null && id.equals("Aula")) {
                    operacion = operacion + "&tipo=Aula";
                    res = this.ListarReservasAulas(request, response, link, operacion);
                } else if (id != null && id.equals("Sala")) {
                    operacion = operacion + "&tipo=Sala";
                    res = this.ListarReservasSalas(request, response, link, operacion);
                } else if (id != null && !(id.equals("Sala")) && !(id.equals("Aula"))) {
                    int tipo = Integer.parseInt(id);
                    operacion = operacion + "&tipo=RM&tipoRM=" + tipo;
                    res = this.ListarReservasRM(request, response, tipo, link, operacion);
                }

                response.setContentType("text/html;charset=UTF-8");
                PrintWriter out = response.getWriter();
                try {
                    out.print(res);

                } finally {
                    out.close();
                }
            }
            if (accion.equals("listarAJAX")) {
                //Le envio "0" como 3er parametro, para que no ponga la lista en ningun recurso en particular.
                String res = this.listarRecursos_AJAX(request, response, id, 0);
                response.setContentType("text/html;charset=UTF-8");
                PrintWriter out = response.getWriter();
                try {
                    out.print(res);

                } finally {
                    out.close();
                }
            }
            //Para listar las reservas con la opcion de cancelarlas.
            if (accion.equals("CancelarReservas")) {
                String res = "";
                String link = "Cancelar";
                String operacion = "opCancelar";
                if (id != null && id.equals("Aula")) {
                    operacion = operacion + "&tipo=Aula";
                    res = this.ListarReservasAulas(request, response, link, operacion);
                } else if (id != null && id.equals("Sala")) {
                    operacion = operacion + "&tipo=Sala";
                    res = this.ListarReservasSalas(request, response, link, operacion);
                } else if (id != null && !(id.equals("Sala")) && !(id.equals("Aula"))) {
                    int tipo = Integer.parseInt(id);
                    operacion = operacion + "&tipo=RM&tipoRM=" + tipo;
                    res = this.ListarReservasRM(request, response, tipo, link, operacion);
                }

                response.setContentType("text/html;charset=UTF-8");
                PrintWriter out = response.getWriter();
                try {
                    out.print(res);

                } finally {
                    out.close();
                }
            }
            //Para listar las reservas con la opcion de verlas.
            if (accion.equals("ListarRegistrar")) {
                String res = "";
                String link = "Registrar";
                String operacion = "opRegistrar";
                if (id != null && id.equals("Aula")) {
                    operacion = operacion + "&tipo=Aula";
                    res = this.ListarReservasAulas(request, response, link, operacion);
                } else if (id != null && id.equals("Sala")) {
                    operacion = operacion + "&tipo=Sala";
                    res = this.ListarReservasSalas(request, response, link, operacion);
                } else if (id != null && !(id.equals("Sala")) && !(id.equals("Aula"))) {
                    int tipo = Integer.parseInt(id);
                    operacion = operacion + "&tipo=RM&tipoRM=" + tipo;
                    res = this.ListarReservasRM(request, response, tipo, link, operacion);
                }

                response.setContentType("text/html;charset=UTF-8");
                PrintWriter out = response.getWriter();
                try {
                    out.print(res);

                } finally {
                    out.close();
                }
            }
        } catch (Exception ex) {
            try {
                GestionarUsuarios.sendErrorRedirect(request, response, "jsp/errores/errorGenerico.jsp", ex);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        //Para listar las reservas de un usuario con la opcion de verlas.
        if (accion.equals("ListarMis")) {
            String res = "";
            String link = "Ver";
            String operacion = "opVer";
            if (id != null && id.equals("Aula")) {
                operacion = operacion + "&tipo=Aula";
                res = this.ListarReservasAulas(request, response, link, operacion);
            } else if (id != null && id.equals("Sala")) {
                operacion = operacion + "&tipo=Sala";
                res = this.ListarReservasSalas(request, response, link, operacion);
            } else if (id != null && !(id.equals("Sala")) && !(id.equals("Aula"))) {
                int tipo = Integer.parseInt(id);
                operacion = operacion + "&tipo=RM&tipoRM=" + tipo;
                res = this.ListarReservasRM(request, response, tipo, link, operacion);
            }

            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                out.print(res);

            } finally {
                out.close();
            }
        }
        //Para listar las reservas de un usuario con la opcion de cancelarlas.
        if (accion.equals("CancelarMis")) {
            String res = "";
            String link = "Cancelar";
            String operacion = "opCancelar";
            if (id != null && id.equals("Aula")) {
                operacion = operacion + "&tipo=Aula&cancelar=mis";
                res = this.ListarReservasAulas(request, response, link, operacion);
            } else if (id != null && id.equals("Sala")) {
                operacion = operacion + "&tipo=Sala&cancelar=mis";
                res = this.ListarReservasSalas(request, response, link, operacion);
            } else if (id != null && !(id.equals("Sala")) && !(id.equals("Aula"))) {
                int tipo = Integer.parseInt(id);
                operacion = operacion + "&tipo=RM&cancelar=mis&tipoRM=" + tipo;
                res = this.ListarReservasRM(request, response, tipo, link, operacion);
            }

            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                out.print(res);

            } finally {
                out.close();
            }
        }

    }

    /** 
     * Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    /**
     * Modifica una reserva sacando todos los campos del request enviado por medio de un formulario.
     * @param request Contiene todos los campos necesarios para modificar la reserva.
     * @param response
     * @return Retorna un mensaje que indica el estado de la Reserva modificada, en este mensaje dice si "hay solapamiento", si las fechas son inconsistente (fecha reserva menor a fecha creacion), o las horas son inconsistentes (hora fin menor a hora inicio)
     */
    protected String ModificarReserva(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession(false);
        String id = request.getParameter("idReservador");
        int idReserva = Integer.parseInt(request.getParameter("idReserva"));
        Connection cone;
        Usuarios user = null;
        String mensaje = null;
        int idReservador;
        if (id != null) {
            if (session != null) {
                cone = (Connection) session.getAttribute("conexion");
                user = (Usuarios) session.getAttribute("datosUser");
                idReservador = Integer.parseInt(id);
                Reserva reservita = new Reserva();
                reservita.setId_solicitante(idReservador);
                reservita.setId_operador(user.getId_usuario());
                String fecha = request.getParameter("Fecha_Reserva");
                Date fecha_reserva = Date.valueOf(fecha);
                reservita.setFecha_reserva(fecha_reserva);
                String horaInicio = request.getParameter("hHora_de_Inicio") + ":" + request.getParameter("mHora_de_Inicio") + ":00";
                String horaFin = request.getParameter("hHora_de_Fin") + ":" + request.getParameter("mHora_de_Fin") + ":00";
                Time horainicio_asignada = Time.valueOf(horaInicio);
                Time horafin_asignada = Time.valueOf(horaFin);
                reservita.setHorafin_asignada(horafin_asignada);
                reservita.setHorainicio_asignada(horainicio_asignada);

                String ubiStr = request.getParameter("Ubicacion");
                //Si lo que hay en Ubicacion es distinto de #, entonces significa que la reserva SI tiene ubicacion.
                if (!ubiStr.equals("#")) {
                    reservita.setId_ubicacion(Integer.parseInt(ubiStr));
                }
                reservita.setC_i_responsable(request.getParameter("Num_Doc_Responsable"));
                reservita.setNombre_responsable(request.getParameter("Nombre_Responsable"));
                String idRecurStr = request.getParameter("recurso");
                //Si idRecurStr es igual a #, significa que el tipo solo eligio un tipo de recurso y no un recurso
                if (!idRecurStr.equals("#")) {
                    reservita.setId_recurso(Long.parseLong(request.getParameter("recurso")));
                }
                ManejadorReservas manejarReservas = new ManejadorReservas(cone);
                boolean exito = manejarReservas.ModificarReserva(reservita, idReserva);
                if (!exito) {
                    mensaje = manejarReservas.getMensajeProblem();
                } else {
                    mensaje = "La reserva fue modificada con EXITO..";
                }
            }

        }

        return mensaje;
    }

    /**
     * Agrega una reserva sacando todos los campos del request enviado por medio de un formulario.
     * @param request Contiene todos los campos necesarios para guardar la reserva.
     * @param response
     * @return Retorna un mensaje que indica el estado del agregar Reserva, en este mensaje dice si "hay solapamiento", si las fechas son inconsistente (fecha reserva menor a fecha creacion), o las horas son inconsistentes (hora fin menor a hora inicio)
     */
    public static String AgregarReserva(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession(false);
        String id = request.getParameter("idReservador");
        Connection cone;
        Usuarios user = null;
        String mensaje = null;
        int idReservador;
        if (id != null) {
            if (session != null) {
                cone = (Connection) session.getAttribute("conexion");
                user = (Usuarios) session.getAttribute("datosUser");
                idReservador = Integer.parseInt(id);
                Reserva reservita = new Reserva();
                reservita.setId_solicitante(idReservador);
                reservita.setId_operador(user.getId_usuario());
                String fecha = request.getParameter("Fecha_Reserva");
                Date fecha_reserva = Date.valueOf(fecha);
                reservita.setFecha_reserva(fecha_reserva);
                String horaInicio = request.getParameter("hHora_de_Inicio") + ":" + request.getParameter("mHora_de_Inicio") + ":00";
                String horaFin = request.getParameter("hHora_de_Fin") + ":" + request.getParameter("mHora_de_Fin") + ":00";
                Time horainicio_asignada = Time.valueOf(horaInicio);
                Time horafin_asignada = Time.valueOf(horaFin);
                reservita.setHorafin_asignada(horafin_asignada);
                reservita.setHorainicio_asignada(horainicio_asignada);

                String ubiStr = request.getParameter("Ubicacion");
                //Si lo que hay en Ubicacion es distinto de #, entonces significa que la reserva SI tiene ubicacion.
                if (!ubiStr.equals("#")) {
                    reservita.setId_ubicacion(Integer.parseInt(ubiStr));
                }
                reservita.setC_i_responsable(request.getParameter("Num_Doc_Responsable"));
                reservita.setNombre_responsable(request.getParameter("Nombre_Responsable"));
                String idRecurStr = request.getParameter("recurso");
                //Si idRecurStr es igual a #, significa que el tipo solo eligio un tipo de recurso y no un recurso
                if (!idRecurStr.equals("#")) {
                    reservita.setId_recurso(Long.parseLong(request.getParameter("recurso")));
                }
                ManejadorReservas manejarReservas = new ManejadorReservas(cone);
                boolean exito = manejarReservas.AgregarReserva(reservita);
                if (!exito) {
                    mensaje = manejarReservas.getMensajeProblem();
                } else {
                    mensaje = "La reserva fue agregada con EXITO..";
                }
            }

        }
        return mensaje;
    }

    /**
     * Este metodo realiza la impresion de una tabla que contiene las reservas que existen en el sistema y que se realizaron sobre
     * un aula.
     * @param request
     * @param response
     * @param link Define que nombre se pondra a la referencia, si sera "Ver", "Modificar", "Cancelar" y "Registrar"
     * @param operacion Define que nombre se pondra al link para el parametro hacer.
     * @return Retorna una cadena que contiene la tabla completa ha ser mostrada en el cliente.
     */
    protected String ListarReservasAulas(HttpServletRequest request, HttpServletResponse response, String link, String operacion) {
        try {
            String respuesta = "";
            boolean band = true;
            HttpSession session = request.getSession(false);
            String accion = request.getParameter("hacer");
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                Usuarios user = (Usuarios) session.getAttribute("datosUser");
                if (cone != null) {
                    ManejadorReservas manager = new ManejadorReservas(cone);
                    Aulas[] resultado = null;
                    resultado = manager.ObtenerReservasAulas();

                    if (resultado != null && resultado.length > 0 && accion != null) {
                        respuesta = this.CabeceraTabla();
                        if (link.equals("Ver") || link.equals("Registrar") || accion.equalsIgnoreCase("CancelarMis")) {
                            if (link.equals("Ver") || accion.equalsIgnoreCase("CancelarMis")) {
                                if ((accion.equalsIgnoreCase("ListarMis") || accion.equalsIgnoreCase("CancelarMis"))) {
                                    for (int i = 0; i < resultado.length; i++) {
                                        if (user.getId_usuario() == resultado[i].getId_solicitante() && !resultado[i].getCancelada()) {
                                            band = false;
                                            respuesta = respuesta + "<tr> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                            if (resultado[i].getCancelada()) {
                                                respuesta = respuesta + "<td>Si</td> ";
                                            } else {
                                                respuesta = respuesta + "<td>No</td> ";
                                            }
                                            respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&mis=true" + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                            respuesta = respuesta + "</tr> ";
                                        }
                                    }
                                } else {
                                    for (int i = 0; i < resultado.length; i++) {
                                        band = false;
                                        respuesta = respuesta + "<tr> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                        if (resultado[i].getCancelada()) {
                                            respuesta = respuesta + "<td>Si</td> ";
                                        } else {
                                            respuesta = respuesta + "<td>No</td> ";
                                        }
                                        respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                        respuesta = respuesta + "</tr> ";
                                    }
                                }
                            } else {
                                for (int i = 0; i < resultado.length; i++) {
                                    if (!(resultado[i].getCancelada())) {
                                        band = false;
                                        respuesta = respuesta + "<tr> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                        if (resultado[i].getCancelada()) {
                                            respuesta = respuesta + "<td>Si</td> ";
                                        } else {
                                            respuesta = respuesta + "<td>No</td> ";
                                        }
                                        respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                        respuesta = respuesta + "</tr> ";
                                    }
                                }
                            }
                        } else {
                            Date fecha = new Date(System.currentTimeMillis());
                            for (int i = 0; i < resultado.length; i++) {
                                if (!(resultado[i].getCancelada()) && ((resultado[i].getFecha_reserva().after(fecha)) || (resultado[i].getFecha_reserva().toString().equals(fecha.toString())))) {
                                    band = false;
                                    respuesta = respuesta + "<tr> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                    if (resultado[i].getCancelada()) {
                                        respuesta = respuesta + "<td>Si</td> ";
                                    } else {
                                        respuesta = respuesta + "<td>No</td> ";
                                    }
                                    respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                    respuesta = respuesta + "</tr> ";
                                }


                            }
                            respuesta = respuesta + "</tbody> ";
                            respuesta = respuesta + "</table> ";
                        }
                        if (band) {
                            respuesta = "<br><p><FONT FACE=\"arial\" SIZE=1 COLOR=red>No existen Reservas no canceladas ni que tengan una fecha mayor a la fecha actual de la opcion seleccionada....</FONT></p>";
                        }
                    } else {
                        respuesta = "<br><p><FONT FACE=\"arial\" SIZE=1 COLOR=red>No existen Reservas de la opcion seleccionada....</FONT></p>";
                    }
                }
            }
            return respuesta;

        } catch (ReservaException ex) {
            return null;

        }
    }

    /**
     * Este metodo realiza la impresion de una tabla que contiene las reservas que existen en el sistema y que se realizaron sobre
     * una Sala de Maquinas.
     * @param request
     * @param response
     * @param link Define que nombre se pondra a la referencia, si sera "Ver", "Modificar", "Cancelar" y "Registrar"
     * @param operacion Define que nombre se pondra al link para el parametro hacer.
     * @return Retorna una cadena que contiene la tabla completa ha ser mostrada en el cliente.
     */
    protected String ListarReservasSalas(HttpServletRequest request, HttpServletResponse response, String link, String operacion) {
        try {
            String respuesta = "";
            boolean band = true;
            HttpSession session = request.getSession(false);
            String accion = request.getParameter("hacer");
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                Usuarios user = (Usuarios) session.getAttribute("datosUser");
                if (cone != null) {
                    ManejadorReservas manager = new ManejadorReservas(cone);
                    Sala_de_maquinas[] resultado = null;
                    resultado = manager.ObtenerReservasSalas();

                    if (resultado != null && resultado.length > 0 && accion != null) {
                        respuesta = this.CabeceraTabla();
                        if (link.equals("Ver") || link.equals("Registrar") || accion.equalsIgnoreCase("CancelarMis")) {
                            if (link.equals("Ver") || accion.equalsIgnoreCase("CancelarMis")) {
                                if ((accion.equalsIgnoreCase("ListarMis") || accion.equalsIgnoreCase("CancelarMis"))) {
                                    for (int i = 0; i < resultado.length; i++) {
                                        if (user.getId_usuario() == resultado[i].getId_solicitante() && !resultado[i].getCancelada()) {
                                            band = false;
                                            respuesta = respuesta + "<tr> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                            if (resultado[i].getCancelada()) {
                                                respuesta = respuesta + "<td>Si</td> ";
                                            } else {
                                                respuesta = respuesta + "<td>No</td> ";
                                            }
                                            respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&mis=true" + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                            respuesta = respuesta + "</tr> ";
                                        }
                                    }
                                } else {
                                    for (int i = 0; i < resultado.length; i++) {
                                        band = false;
                                        respuesta = respuesta + "<tr> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                        if (resultado[i].getCancelada()) {
                                            respuesta = respuesta + "<td>Si</td> ";
                                        } else {
                                            respuesta = respuesta + "<td>No</td> ";
                                        }
                                        respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                        respuesta = respuesta + "</tr> ";
                                    }
                                }
                            } else {
                                for (int i = 0; i < resultado.length; i++) {
                                    if (!(resultado[i].getCancelada())) {
                                        band = false;
                                        respuesta = respuesta + "<tr> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                        if (resultado[i].getCancelada()) {
                                            respuesta = respuesta + "<td>Si</td> ";
                                        } else {
                                            respuesta = respuesta + "<td>No</td> ";
                                        }
                                        respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                        respuesta = respuesta + "</tr> ";
                                    }
                                }
                            }
                        } else {
                            for (int i = 0; i < resultado.length; i++) {
                                Date fecha = new Date(System.currentTimeMillis());
                                if (!(resultado[i].getCancelada()) && ((resultado[i].getFecha_reserva().after(fecha)) || (resultado[i].getFecha_reserva().toString().equals(fecha.toString())))) {
                                    band = false;
                                    respuesta = respuesta + "<tr> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                    if (resultado[i].getCancelada()) {
                                        respuesta = respuesta + "<td>Si</td> ";
                                    } else {
                                        respuesta = respuesta + "<td>No</td> ";
                                    }
                                    respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                    respuesta = respuesta + "</tr> ";
                                }


                            }
                            respuesta = respuesta + "</tbody> ";
                            respuesta = respuesta + "</table> ";
                        }
                        if (band) {
                            respuesta = "<br><p><FONT FACE=\"arial\" SIZE=1 COLOR=red>No existen Reservas no canceladas ni que tengan una fecha mayor a la fecha actual de la opcion seleccionada....</FONT></p>";
                        }
                    } else {
                        respuesta = "<br><p><FONT FACE=\"arial\" SIZE=1 COLOR=red>No existen Reservas de la opcion seleccionada....</FONT></p>";
                    }
                }
            }
            return respuesta;

        } catch (ReservaException ex) {
            return null;

        }
    }

    /**
     * Este metodo realiza la impresion de una tabla que contiene las reservas que existen en el sistema y que se realizaron sobre
     * un Recurso Movil.
     * @param request
     * @param response
     * @param idTipo Indica el tipo de Recurso movil, del cual se quiere obtener las reservas.
     * @param link Define que nombre se pondra a la referencia, si sera "Ver", "Modificar", "Cancelar" y "Registrar"
     * @param operacion Define que nombre se pondra al link para el parametro hacer.
     * @return Retorna una cadena que contiene la tabla completa ha ser mostrada en el cliente.
     */
    protected String ListarReservasRM(HttpServletRequest request, HttpServletResponse response, int idTipo, String link, String operacion) {
        try {
            String respuesta = "";
            boolean band = true;
            HttpSession session = request.getSession(false);
            String accion = request.getParameter("hacer");
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                Usuarios user = (Usuarios) session.getAttribute("datosUser");
                if (cone != null) {
                    ManejadorReservas manager = new ManejadorReservas(cone);
                    Recurso_movil[] resultado = null;
                    resultado = manager.ObtenerReservasRM(idTipo);

                    if (resultado != null && resultado.length > 0 && accion != null) {
                        respuesta = this.CabeceraTabla();
                        if (link.equals("Ver") || link.equals("Registrar") || accion.equalsIgnoreCase("CancelarMis")) {
                            if (link.equals("Ver") || accion.equalsIgnoreCase("CancelarMis")) {
                                if ((accion.equalsIgnoreCase("ListarMis") || accion.equalsIgnoreCase("CancelarMis"))) {
                                    for (int i = 0; i < resultado.length; i++) {
                                        if (user.getId_usuario() == resultado[i].getId_solicitante() && !resultado[i].getCancelada()) {
                                            band = false;
                                            respuesta = respuesta + "<tr> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                            respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                            if (resultado[i].getCancelada()) {
                                                respuesta = respuesta + "<td>Si</td> ";
                                            } else {
                                                respuesta = respuesta + "<td>No</td> ";
                                            }
                                            respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&mis=true" + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                            respuesta = respuesta + "</tr> ";
                                        }
                                    }
                                } else {
                                    for (int i = 0; i < resultado.length; i++) {
                                        band = false;
                                        respuesta = respuesta + "<tr> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                        if (resultado[i].getCancelada()) {
                                            respuesta = respuesta + "<td>Si</td> ";
                                        } else {
                                            respuesta = respuesta + "<td>No</td> ";
                                        }
                                        respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                        respuesta = respuesta + "</tr> ";
                                    }
                                }
                            } else {
                                for (int i = 0; i < resultado.length; i++) {
                                    if (!(resultado[i].getCancelada())) {
                                        band = false;
                                        respuesta = respuesta + "<tr> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                        respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                        if (resultado[i].getCancelada()) {
                                            respuesta = respuesta + "<td>Si</td> ";
                                        } else {
                                            respuesta = respuesta + "<td>No</td> ";
                                        }
                                        respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                        respuesta = respuesta + "</tr> ";
                                    }
                                }
                            }
                        } else {
                            for (int i = 0; i < resultado.length; i++) {
                                Date fecha = new Date(System.currentTimeMillis());
                                if (!(resultado[i].getCancelada()) && ((resultado[i].getFecha_reserva().after(fecha)) || (resultado[i].getFecha_reserva().toString().equals(fecha.toString())))) {
                                    band = false;
                                    respuesta = respuesta + "<tr> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getNombre() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getFecha_reserva().toString() + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getHorainicio_asignada().toString().substring(0, 5) + "</td> ";
                                    respuesta = respuesta + "<td>" + resultado[i].getHorafin_asignada().toString().substring(0, 5) + "</td> ";
                                    if (resultado[i].getCancelada()) {
                                        respuesta = respuesta + "<td>Si</td> ";
                                    } else {
                                        respuesta = respuesta + "<td>No</td> ";
                                    }
                                    respuesta = respuesta + "<th class=\"nada\"><a href=\"GestionarReservas?hacer=" + operacion + "&id=" + resultado[i].getId_reserva() + "&NombreSolicitante=" + resultado[i].getNombreoperativo() + " " + resultado[i].getApellido() + "&NombreRecurso=" + resultado[i].getNombre() + "\">" + link + "</a></th> ";
                                    respuesta = respuesta + "</tr> ";
                                }
                            }
                            respuesta = respuesta + "</tbody> ";
                            respuesta = respuesta + "</table> ";
                        }
                        if (band) {
                            respuesta = "<br><p><FONT FACE=\"arial\" SIZE=1 COLOR=red>No existen Reservas no canceladas ni que tengan una fecha mayor a la fecha actual de la opcion seleccionada....</FONT></p>";
                        }
                    } else {
                        respuesta = "<br><p><FONT FACE=\"arial\" SIZE=1 COLOR=red>No existen Reservas de la opcion seleccionada....</FONT></p>";
                    }
                }
            }
            return respuesta;

        } catch (ReservaException ex) {
            return null;

        }
    }

    /**
     * Este metodo es utilizado para obtener las cabeceras de las tablas construidas en los metodos: 
     * ListarReservasAulas, ListarReservasSalas y ListarReservasRM.
     * @return Retorna una cadena que contiene la cabecera de la tabla.
     */
    protected String CabeceraTabla() {
        String respuesta = "";
        respuesta = respuesta + "<table border=\"0\"> ";
        respuesta = respuesta + "<tbody> ";
        respuesta = respuesta + "<tr> ";
        respuesta = respuesta + "<th class=\"top\"><center><b>Solicitante</b></center></th> ";
        respuesta = respuesta + "<th class=\"top\"><center><b>Recurso</b></center></th> ";
        respuesta = respuesta + "<th class=\"top\"><center><b>Fecha Reserva</b></center></th> ";
        respuesta = respuesta + "<th class=\"top\"><center><b>Inicio</b></center></th> ";
        respuesta = respuesta + "<th class=\"top\"><center><b>Fin</b></center></th> ";
        respuesta = respuesta + "<th class=\"top\"><center><b>Cancelada</b></center></th> ";
        respuesta = respuesta + "</tr>";
        return respuesta;
    }

    /**
     * Realiza la cancelacion de una reserva determinada, en realidad lo que se realiza es una actualizacion de la
     * reserva debido a que se pone a "true" el campo de cancelada de la reserva. El id de la reserva a cancelar
     * se obtiene del Request.
     * @param request
     * @param response
     * @return Un booleano, "true" si la reserva fue cancelada exitosamente y "false" en otro caso.
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected boolean CancelarReserva(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            int idReserva = Integer.parseInt(request.getParameter("id"));
            HttpSession session = request.getSession(false);
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                Usuarios user = (Usuarios) session.getAttribute("datosUser");
                if (cone != null) {
                    ManejadorReservas manejadorReserva = new ManejadorReservas(cone);
                    manejadorReserva.CancelarReserva(idReserva, user.getId_usuario());
                    return true;
                }
            }
            return false;
        } catch (ReservaException ex) {
            return false;
        }
    }

    /**
     * Lista todo los recursos dependiendo del tipo que se eliga. Esta funcion  es utilizada
     * con AJAX para hacer la lista desplegable del formulario de reservas.
     * @param request En el requeste tenemos la conexion a la BD.
     * @param response
     * @param id Este id representa el tipo de recurso que solicitamos listar los recursos. Su valor puede ser Aula, SM (Sala de Maquina) y un entero que representa el tipo de recurso movil.
     * @param idRecurActual Puede valer "0" (Significa que no se tiene posicionar en ningun elemento en paraticular), o ser un String que represente un numero de idRecurso donde se quiere que la lista lo tenga como seleccionado. 
     * @return Una cadena que representa la lista de recursos en un formato HTML de select, para que luego pueda ser insertado en la pagina directamente.
     * @throws com.akcess.exception.Recurso_movilException
     */
    public static String listarRecursos_AJAX(HttpServletRequest request, HttpServletResponse response, String idtipo, long idRecurActual) throws Recurso_movilException, Sala_de_maquinasException, AulasException {


        HttpSession session = request.getSession(false);
        Connection cone;
        cone = (Connection) session.getAttribute("conexion");
        String resultado = " ";


        if (idtipo.equals("Aula")) {
            ManejadorRecursosAulas manejadorAula = new ManejadorRecursosAulas(cone);
            RecursoAulaCompleto[] vecRecursos = manejadorAula.ListarRecursosAulas();
            for (int i = 0; i < vecRecursos.length; i++) {


                if (idRecurActual != 0 && vecRecursos[i].getId_recurso() == idRecurActual) {
                    resultado = resultado + "<option  selected value=" + vecRecursos[i].getId_recurso() + ">" + vecRecursos[i].getNombre() + "</option> ";
                } else {
                    if (!vecRecursos[i].getBorrado() && vecRecursos[i].getDisponible()) {
                        resultado = resultado + "<option  value=" + vecRecursos[i].getId_recurso() + ">" + vecRecursos[i].getNombre() + "</option> ";
                    }
                }



            }

        } else if (idtipo.equals("Sala")) {
            ManejadorSM manejadorSM = new ManejadorSM(cone);
            RecursoSMCompleto[] vecRecursos = manejadorSM.ListarRecursosSM();

            for (int i = 0; i < vecRecursos.length; i++) {
                if (idRecurActual != 0 && vecRecursos[i].getId_recurso() == idRecurActual) {
                    resultado = resultado + "<option  selected value=" + vecRecursos[i].getId_recurso() + ">" + vecRecursos[i].getNombre() + "</option> ";
                } else {
                    if (!vecRecursos[i].getBorrado() && vecRecursos[i].getDisponible()) {
                        resultado = resultado + "<option  value=" + vecRecursos[i].getId_recurso() + ">" + vecRecursos[i].getNombre() + "</option> ";
                    }
                }
            }
        } else {
            ManejadorRecursoMovil manejadorRM = new ManejadorRecursoMovil(cone);
            int id_Int = Integer.parseInt(idtipo);
            Recurso[] vecRecursos = manejadorRM.ObtenerRMdeTipo(id_Int);
            for (int i = 0; i < vecRecursos.length; i++) {


                if (idRecurActual != 0 && vecRecursos[i].getId_recurso() == idRecurActual) {
                    resultado = resultado + "<option  selected value=" + vecRecursos[i].getId_recurso() + ">" + vecRecursos[i].getNombre() + "</option> ";
                } else {
                    if (!vecRecursos[i].getBorrado() && vecRecursos[i].getDisponible()) {
                        resultado = resultado + "<option  value=" + vecRecursos[i].getId_recurso() + ">" + vecRecursos[i].getNombre() + "</option> ";
                    }

                }

            }
        }



        return resultado;

    }

    /**
     * Este metodo es utilizado para registrar un evento a una Reserva determinada. El id del Evento y dek personal encargado del 
     * evento se obtienen del Request asi como el id de la Reserva. No importa si no se tiene el id del Personal debido a que dicha 
     * columna puede aceptar "null". Al registrarse el evento tambien se modifica la disponibilidad del recurso afectado por el evento
     * ,es decir, el recurso se pone a no disponible o disponible si el evento asi lo dice.
     * @param request
     * @param response
     * @return Un booleano, "true" si el evento fue registrado exitosamente y "false" en otro caso.
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected boolean RegistarEvento(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Registro_evento evento = new Registro_evento();
            evento.setId_evento(Integer.parseInt(request.getParameter("Evento")));
            evento.setId_reserva((long) Integer.parseInt(request.getParameter("id")));
            String idPersonal = request.getParameter("Personal");
            if (!idPersonal.equals("null")) {
                evento.setId_enviador(Integer.parseInt(idPersonal));
            }


            HttpSession session = request.getSession(false);
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorReservas manejador = new ManejadorReservas(cone);
                    manejador.RegistrarEvento(evento);
                    return true;
                }
            }
            return false;
        } catch (Exception ex) {
            return false;
        }
    }
}
